package com.supermap.localization;

import java.io.UnsupportedEncodingException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 *
 * <p>
 * 中文到拼音的转换工具类
 * </p>
 *
 */
public final class ChineseSpelling {

    private static GB2312CodeSpellingPair[] pairs = new GB2312CodeSpellingPair[] { new GB2312CodeSpellingPair(-20319, "A"),
        new GB2312CodeSpellingPair(-20317, "Ai"),
        new GB2312CodeSpellingPair(-20304, "An"),
        new GB2312CodeSpellingPair(-20295, "Ang"),
        new GB2312CodeSpellingPair(-20292, "Ao"),
        new GB2312CodeSpellingPair(-20283, "Ba"),
        new GB2312CodeSpellingPair(-20265, "Bai"),
        new GB2312CodeSpellingPair(-20257, "Ban"),
        new GB2312CodeSpellingPair(-20242, "Bang"),
        new GB2312CodeSpellingPair(-20230, "Bao"),
        new GB2312CodeSpellingPair(-20051, "Bei"),
        new GB2312CodeSpellingPair(-20036, "Ben"),
        new GB2312CodeSpellingPair(-20032, "Beng"),
        new GB2312CodeSpellingPair(-20026, "Bi"),
        new GB2312CodeSpellingPair(-20002, "Bian"),
        new GB2312CodeSpellingPair(-19990, "Biao"),
        new GB2312CodeSpellingPair(-19986, "Bie"),
        new GB2312CodeSpellingPair(-19982, "Bin"),
        new GB2312CodeSpellingPair(-19976, "Bing"),
        new GB2312CodeSpellingPair(-19805, "Bo"),
        new GB2312CodeSpellingPair(-19784, "Bu"),
        new GB2312CodeSpellingPair(-19775, "Ca"),
        new GB2312CodeSpellingPair(-19774, "Cai"),
        new GB2312CodeSpellingPair(-19763, "Can"),
        new GB2312CodeSpellingPair(-19756, "Cang"),
        new GB2312CodeSpellingPair(-19751, "Cao"),
        new GB2312CodeSpellingPair(-19746, "Ce"),
        new GB2312CodeSpellingPair(-19741, "Ceng"),
        new GB2312CodeSpellingPair(-19739, "Cha"),
        new GB2312CodeSpellingPair(-19728, "Chai"),
        new GB2312CodeSpellingPair(-19725, "Chan"),
        new GB2312CodeSpellingPair(-19715, "Chang"),
        new GB2312CodeSpellingPair(-19540, "Chao"),
        new GB2312CodeSpellingPair(-19531, "Che"),
        new GB2312CodeSpellingPair(-19525, "Chen"),
        new GB2312CodeSpellingPair(-19515, "Cheng"),
        new GB2312CodeSpellingPair(-19500, "Chi"),
        new GB2312CodeSpellingPair(-19484, "Chong"),
        new GB2312CodeSpellingPair(-19479, "Chou"),
        new GB2312CodeSpellingPair(-19467, "Chu"),
        new GB2312CodeSpellingPair(-19289, "Chuai"),
        new GB2312CodeSpellingPair(-19288, "Chuan"),
        new GB2312CodeSpellingPair(-19281, "Chuang"),
        new GB2312CodeSpellingPair(-19275, "Chui"),
        new GB2312CodeSpellingPair(-19270, "Chun"),
        new GB2312CodeSpellingPair(-19263, "Chuo"),
        new GB2312CodeSpellingPair(-19261, "Ci"),
        new GB2312CodeSpellingPair(-19249, "Cong"),
        new GB2312CodeSpellingPair(-19243, "Cou"),
        new GB2312CodeSpellingPair(-19242, "Cu"),
        new GB2312CodeSpellingPair(-19238, "Cuan"),
        new GB2312CodeSpellingPair(-19235, "Cui"),
        new GB2312CodeSpellingPair(-19227, "Cun"),
        new GB2312CodeSpellingPair(-19224, "Cuo"),
        new GB2312CodeSpellingPair(-19218, "Da"),
        new GB2312CodeSpellingPair(-19212, "Dai"),
        new GB2312CodeSpellingPair(-19038, "Dan"),
        new GB2312CodeSpellingPair(-19023, "Dang"),
        new GB2312CodeSpellingPair(-19018, "Dao"),
        new GB2312CodeSpellingPair(-19006, "De"),
        new GB2312CodeSpellingPair(-19003, "Deng"),
        new GB2312CodeSpellingPair(-18996, "Di"),
        new GB2312CodeSpellingPair(-18977, "Dian"),
        new GB2312CodeSpellingPair(-18961, "Diao"),
        new GB2312CodeSpellingPair(-18952, "Die"),
        new GB2312CodeSpellingPair(-18783, "Ding"),
        new GB2312CodeSpellingPair(-18774, "Diu"),
        new GB2312CodeSpellingPair(-18773, "Dong"),
        new GB2312CodeSpellingPair(-18763, "Dou"),
        new GB2312CodeSpellingPair(-18756, "Du"),
        new GB2312CodeSpellingPair(-18741, "Duan"),
        new GB2312CodeSpellingPair(-18735, "Dui"),
        new GB2312CodeSpellingPair(-18731, "Dun"),
        new GB2312CodeSpellingPair(-18722, "Duo"),
        new GB2312CodeSpellingPair(-18710, "E"),
        new GB2312CodeSpellingPair(-18697, "En"),
        new GB2312CodeSpellingPair(-18696, "Er"),
        new GB2312CodeSpellingPair(-18526, "Fa"),
        new GB2312CodeSpellingPair(-18518, "Fan"),
        new GB2312CodeSpellingPair(-18501, "Fang"),
        new GB2312CodeSpellingPair(-18490, "Fei"),
        new GB2312CodeSpellingPair(-18478, "Fen"),
        new GB2312CodeSpellingPair(-18463, "Feng"),
        new GB2312CodeSpellingPair(-18448, "Fo"),
        new GB2312CodeSpellingPair(-18447, "Fou"),
        new GB2312CodeSpellingPair(-18446, "Fu"),
        new GB2312CodeSpellingPair(-18239, "Ga"),
        new GB2312CodeSpellingPair(-18237, "Gai"),
        new GB2312CodeSpellingPair(-18231, "Gan"),
        new GB2312CodeSpellingPair(-18220, "Gang"),
        new GB2312CodeSpellingPair(-18211, "Gao"),
        new GB2312CodeSpellingPair(-18201, "Ge"),
        new GB2312CodeSpellingPair(-18184, "Gei"),
        new GB2312CodeSpellingPair(-18183, "Gen"),
        new GB2312CodeSpellingPair(-18181, "Geng"),
        new GB2312CodeSpellingPair(-18012, "Gong"),
        new GB2312CodeSpellingPair(-17997, "Gou"),
        new GB2312CodeSpellingPair(-17988, "Gu"),
        new GB2312CodeSpellingPair(-17970, "Gua"),
        new GB2312CodeSpellingPair(-17964, "Guai"),
        new GB2312CodeSpellingPair(-17961, "Guan"),
        new GB2312CodeSpellingPair(-17950, "Guang"),
        new GB2312CodeSpellingPair(-17947, "Gui"),
        new GB2312CodeSpellingPair(-17931, "Gun"),
        new GB2312CodeSpellingPair(-17928, "Guo"),
        new GB2312CodeSpellingPair(-17922, "Ha"),
        new GB2312CodeSpellingPair(-17759, "Hai"),
        new GB2312CodeSpellingPair(-17752, "Han"),
        new GB2312CodeSpellingPair(-17733, "Hang"),
        new GB2312CodeSpellingPair(-17730, "Hao"),
        new GB2312CodeSpellingPair(-17721, "He"),
        new GB2312CodeSpellingPair(-17703, "Hei"),
        new GB2312CodeSpellingPair(-17701, "Hen"),
        new GB2312CodeSpellingPair(-17697, "Heng"),
        new GB2312CodeSpellingPair(-17692, "Hong"),
        new GB2312CodeSpellingPair(-17683, "Hou"),
        new GB2312CodeSpellingPair(-17676, "Hu"),
        new GB2312CodeSpellingPair(-17496, "Hua"),
        new GB2312CodeSpellingPair(-17487, "Huai"),
        new GB2312CodeSpellingPair(-17482, "Huan"),
        new GB2312CodeSpellingPair(-17468, "Huang"),
        new GB2312CodeSpellingPair(-17454, "Hui"),
        new GB2312CodeSpellingPair(-17433, "Hun"),
        new GB2312CodeSpellingPair(-17427, "Huo"),
        new GB2312CodeSpellingPair(-17417, "Ji"),
        new GB2312CodeSpellingPair(-17202, "Jia"),
        new GB2312CodeSpellingPair(-17185, "Jian"),
        new GB2312CodeSpellingPair(-16983, "Jiang"),
        new GB2312CodeSpellingPair(-16970, "Jiao"),
        new GB2312CodeSpellingPair(-16942, "Jie"),
        new GB2312CodeSpellingPair(-16915, "Jin"),
        new GB2312CodeSpellingPair(-16733, "Jing"),
        new GB2312CodeSpellingPair(-16708, "Jiong"),
        new GB2312CodeSpellingPair(-16706, "Jiu"),
        new GB2312CodeSpellingPair(-16689, "Ju"),
        new GB2312CodeSpellingPair(-16664, "Juan"),
        new GB2312CodeSpellingPair(-16657, "Jue"),
        new GB2312CodeSpellingPair(-16647, "Jun"),
        new GB2312CodeSpellingPair(-16474, "Ka"),
        new GB2312CodeSpellingPair(-16470, "Kai"),
        new GB2312CodeSpellingPair(-16465, "Kan"),
        new GB2312CodeSpellingPair(-16459, "Kang"),
        new GB2312CodeSpellingPair(-16452, "Kao"),
        new GB2312CodeSpellingPair(-16448, "Ke"),
        new GB2312CodeSpellingPair(-16433, "Ken"),
        new GB2312CodeSpellingPair(-16429, "Keng"),
        new GB2312CodeSpellingPair(-16427, "Kong"),
        new GB2312CodeSpellingPair(-16423, "Kou"),
        new GB2312CodeSpellingPair(-16419, "Ku"),
        new GB2312CodeSpellingPair(-16412, "Kua"),
        new GB2312CodeSpellingPair(-16407, "Kuai"),
        new GB2312CodeSpellingPair(-16403, "Kuan"),
        new GB2312CodeSpellingPair(-16401, "Kuang"),
        new GB2312CodeSpellingPair(-16393, "Kui"),
        new GB2312CodeSpellingPair(-16220, "Kun"),
        new GB2312CodeSpellingPair(-16216, "Kuo"),
        new GB2312CodeSpellingPair(-16212, "La"),
        new GB2312CodeSpellingPair(-16205, "Lai"),
        new GB2312CodeSpellingPair(-16202, "Lan"),
        new GB2312CodeSpellingPair(-16187, "Lang"),
        new GB2312CodeSpellingPair(-16180, "Lao"),
        new GB2312CodeSpellingPair(-16171, "Le"),
        new GB2312CodeSpellingPair(-16169, "Lei"),
        new GB2312CodeSpellingPair(-16158, "Leng"),
        new GB2312CodeSpellingPair(-16155, "Li"),
        new GB2312CodeSpellingPair(-15959, "Lia"),
        new GB2312CodeSpellingPair(-15958, "Lian"),
        new GB2312CodeSpellingPair(-15944, "Liang"),
        new GB2312CodeSpellingPair(-15933, "Liao"),
        new GB2312CodeSpellingPair(-15920, "Lie"),
        new GB2312CodeSpellingPair(-15915, "Lin"),
        new GB2312CodeSpellingPair(-15903, "Ling"),
        new GB2312CodeSpellingPair(-15889, "Liu"),
        new GB2312CodeSpellingPair(-15878, "Long"),
        new GB2312CodeSpellingPair(-15707, "Lou"),
        new GB2312CodeSpellingPair(-15701, "Lu"),
        new GB2312CodeSpellingPair(-15681, "Lv"),
        new GB2312CodeSpellingPair(-15667, "Luan"),
        new GB2312CodeSpellingPair(-15661, "Lue"),
        new GB2312CodeSpellingPair(-15659, "Lun"),
        new GB2312CodeSpellingPair(-15652, "Luo"),
        new GB2312CodeSpellingPair(-15640, "Ma"),
        new GB2312CodeSpellingPair(-15631, "Mai"),
        new GB2312CodeSpellingPair(-15625, "Man"),
        new GB2312CodeSpellingPair(-15454, "Mang"),
        new GB2312CodeSpellingPair(-15448, "Mao"),
        new GB2312CodeSpellingPair(-15436, "Me"),
        new GB2312CodeSpellingPair(-15435, "Mei"),
        new GB2312CodeSpellingPair(-15419, "Men"),
        new GB2312CodeSpellingPair(-15416, "Meng"),
        new GB2312CodeSpellingPair(-15408, "Mi"),
        new GB2312CodeSpellingPair(-15394, "Mian"),
        new GB2312CodeSpellingPair(-15385, "Miao"),
        new GB2312CodeSpellingPair(-15377, "Mie"),
        new GB2312CodeSpellingPair(-15375, "Min"),
        new GB2312CodeSpellingPair(-15369, "Ming"),
        new GB2312CodeSpellingPair(-15363, "Miu"),
        new GB2312CodeSpellingPair(-15362, "Mo"),
        new GB2312CodeSpellingPair(-15183, "Mou"),
        new GB2312CodeSpellingPair(-15180, "Mu"),
        new GB2312CodeSpellingPair(-15165, "Na"),
        new GB2312CodeSpellingPair(-15158, "Nai"),
        new GB2312CodeSpellingPair(-15153, "Nan"),
        new GB2312CodeSpellingPair(-15150, "Nang"),
        new GB2312CodeSpellingPair(-15149, "Nao"),
        new GB2312CodeSpellingPair(-15144, "Ne"),
        new GB2312CodeSpellingPair(-15143, "Nei"),
        new GB2312CodeSpellingPair(-15141, "Nen"),
        new GB2312CodeSpellingPair(-15140, "Neng"),
        new GB2312CodeSpellingPair(-15139, "Ni"),
        new GB2312CodeSpellingPair(-15128, "Nian"),
        new GB2312CodeSpellingPair(-15121, "Niang"),
        new GB2312CodeSpellingPair(-15119, "Niao"),
        new GB2312CodeSpellingPair(-15117, "Nie"),
        new GB2312CodeSpellingPair(-15110, "Nin"),
        new GB2312CodeSpellingPair(-15109, "Ning"),
        new GB2312CodeSpellingPair(-14941, "Niu"),
        new GB2312CodeSpellingPair(-14937, "Nong"),
        new GB2312CodeSpellingPair(-14933, "Nu"),
        new GB2312CodeSpellingPair(-14930, "Nv"),
        new GB2312CodeSpellingPair(-14929, "Nuan"),
        new GB2312CodeSpellingPair(-14928, "Nue"),
        new GB2312CodeSpellingPair(-14926, "Nuo"),
        new GB2312CodeSpellingPair(-14922, "O"),
        new GB2312CodeSpellingPair(-14921, "Ou"),
        new GB2312CodeSpellingPair(-14914, "Pa"),
        new GB2312CodeSpellingPair(-14908, "Pai"),
        new GB2312CodeSpellingPair(-14902, "Pan"),
        new GB2312CodeSpellingPair(-14894, "Pang"),
        new GB2312CodeSpellingPair(-14889, "Pao"),
        new GB2312CodeSpellingPair(-14882, "Pei"),
        new GB2312CodeSpellingPair(-14873, "Pen"),
        new GB2312CodeSpellingPair(-14871, "Peng"),
        new GB2312CodeSpellingPair(-14857, "Pi"),
        new GB2312CodeSpellingPair(-14678, "Pian"),
        new GB2312CodeSpellingPair(-14674, "Piao"),
        new GB2312CodeSpellingPair(-14670, "Pie"),
        new GB2312CodeSpellingPair(-14668, "Pin"),
        new GB2312CodeSpellingPair(-14663, "Ping"),
        new GB2312CodeSpellingPair(-14654, "Po"),
        new GB2312CodeSpellingPair(-14645, "Pu"),
        new GB2312CodeSpellingPair(-14630, "Qi"),
        new GB2312CodeSpellingPair(-14594, "Qia"),
        new GB2312CodeSpellingPair(-14429, "Qian"),
        new GB2312CodeSpellingPair(-14407, "Qiang"),
        new GB2312CodeSpellingPair(-14399, "Qiao"),
        new GB2312CodeSpellingPair(-14384, "Qie"),
        new GB2312CodeSpellingPair(-14379, "Qin"),
        new GB2312CodeSpellingPair(-14368, "Qing"),
        new GB2312CodeSpellingPair(-14355, "Qiong"),
        new GB2312CodeSpellingPair(-14353, "Qiu"),
        new GB2312CodeSpellingPair(-14345, "Qu"),
        new GB2312CodeSpellingPair(-14170, "Quan"),
        new GB2312CodeSpellingPair(-14159, "Que"),
        new GB2312CodeSpellingPair(-14151, "Qun"),
        new GB2312CodeSpellingPair(-14149, "Ran"),
        new GB2312CodeSpellingPair(-14145, "Rang"),
        new GB2312CodeSpellingPair(-14140, "Rao"),
        new GB2312CodeSpellingPair(-14137, "Re"),
        new GB2312CodeSpellingPair(-14135, "Ren"),
        new GB2312CodeSpellingPair(-14125, "Reng"),
        new GB2312CodeSpellingPair(-14123, "Ri"),
        new GB2312CodeSpellingPair(-14122, "Rong"),
        new GB2312CodeSpellingPair(-14112, "Rou"),
        new GB2312CodeSpellingPair(-14109, "Ru"),
        new GB2312CodeSpellingPair(-14099, "Ruan"),
        new GB2312CodeSpellingPair(-14097, "Rui"),
        new GB2312CodeSpellingPair(-14094, "Run"),
        new GB2312CodeSpellingPair(-14092, "Ruo"),
        new GB2312CodeSpellingPair(-14090, "Sa"),
        new GB2312CodeSpellingPair(-14087, "Sai"),
        new GB2312CodeSpellingPair(-14083, "San"),
        new GB2312CodeSpellingPair(-13917, "Sang"),
        new GB2312CodeSpellingPair(-13914, "Sao"),
        new GB2312CodeSpellingPair(-13910, "Se"),
        new GB2312CodeSpellingPair(-13907, "Sen"),
        new GB2312CodeSpellingPair(-13906, "Seng"),
        new GB2312CodeSpellingPair(-13905, "Sha"),
        new GB2312CodeSpellingPair(-13896, "Shai"),
        new GB2312CodeSpellingPair(-13894, "Shan"),
        new GB2312CodeSpellingPair(-13878, "Shang"),
        new GB2312CodeSpellingPair(-13870, "Shao"),
        new GB2312CodeSpellingPair(-13859, "She"),
        new GB2312CodeSpellingPair(-13847, "Shen"),
        new GB2312CodeSpellingPair(-13831, "Sheng"),
        new GB2312CodeSpellingPair(-13658, "Shi"),
        new GB2312CodeSpellingPair(-13611, "Shou"),
        new GB2312CodeSpellingPair(-13601, "Shu"),
        new GB2312CodeSpellingPair(-13406, "Shua"),
        new GB2312CodeSpellingPair(-13404, "Shuai"),
        new GB2312CodeSpellingPair(-13400, "Shuan"),
        new GB2312CodeSpellingPair(-13398, "Shuang"),
        new GB2312CodeSpellingPair(-13395, "Shui"),
        new GB2312CodeSpellingPair(-13391, "Shun"),
        new GB2312CodeSpellingPair(-13387, "Shuo"),
        new GB2312CodeSpellingPair(-13383, "Si"),
        new GB2312CodeSpellingPair(-13367, "Song"),
        new GB2312CodeSpellingPair(-13359, "Sou"),
        new GB2312CodeSpellingPair(-13356, "Su"),
        new GB2312CodeSpellingPair(-13343, "Suan"),
        new GB2312CodeSpellingPair(-13340, "Sui"),
        new GB2312CodeSpellingPair(-13329, "Sun"),
        new GB2312CodeSpellingPair(-13326, "Suo"),
        new GB2312CodeSpellingPair(-13318, "Ta"),
        new GB2312CodeSpellingPair(-13147, "Tai"),
        new GB2312CodeSpellingPair(-13138, "Tan"),
        new GB2312CodeSpellingPair(-13120, "Tang"),
        new GB2312CodeSpellingPair(-13107, "Tao"),
        new GB2312CodeSpellingPair(-13096, "Te"),
        new GB2312CodeSpellingPair(-13095, "Teng"),
        new GB2312CodeSpellingPair(-13091, "Ti"),
        new GB2312CodeSpellingPair(-13076, "Tian"),
        new GB2312CodeSpellingPair(-13068, "Tiao"),
        new GB2312CodeSpellingPair(-13063, "Tie"),
        new GB2312CodeSpellingPair(-13060, "Ting"),
        new GB2312CodeSpellingPair(-12888, "Tong"),
        new GB2312CodeSpellingPair(-12875, "Tou"),
        new GB2312CodeSpellingPair(-12871, "Tu"),
        new GB2312CodeSpellingPair(-12860, "Tuan"),
        new GB2312CodeSpellingPair(-12858, "Tui"),
        new GB2312CodeSpellingPair(-12852, "Tun"),
        new GB2312CodeSpellingPair(-12849, "Tuo"),
        new GB2312CodeSpellingPair(-12838, "Wa"),
        new GB2312CodeSpellingPair(-12831, "Wai"),
        new GB2312CodeSpellingPair(-12829, "Wan"),
        new GB2312CodeSpellingPair(-12812, "Wang"),
        new GB2312CodeSpellingPair(-12802, "Wei"),
        new GB2312CodeSpellingPair(-12607, "Wen"),
        new GB2312CodeSpellingPair(-12597, "Weng"),
        new GB2312CodeSpellingPair(-12594, "Wo"),
        new GB2312CodeSpellingPair(-12585, "Wu"),
        new GB2312CodeSpellingPair(-12556, "Xi"),
        new GB2312CodeSpellingPair(-12359, "Xia"),
        new GB2312CodeSpellingPair(-12346, "Xian"),
        new GB2312CodeSpellingPair(-12320, "Xiang"),
        new GB2312CodeSpellingPair(-12300, "Xiao"),
        new GB2312CodeSpellingPair(-12120, "Xie"),
        new GB2312CodeSpellingPair(-12099, "Xin"),
        new GB2312CodeSpellingPair(-12089, "Xing"),
        new GB2312CodeSpellingPair(-12074, "Xiong"),
        new GB2312CodeSpellingPair(-12067, "Xiu"),
        new GB2312CodeSpellingPair(-12058, "Xu"),
        new GB2312CodeSpellingPair(-12039, "Xuan"),
        new GB2312CodeSpellingPair(-11867, "Xue"),
        new GB2312CodeSpellingPair(-11861, "Xun"),
        new GB2312CodeSpellingPair(-11847, "Ya"),
        new GB2312CodeSpellingPair(-11831, "Yan"),
        new GB2312CodeSpellingPair(-11798, "Yang"),
        new GB2312CodeSpellingPair(-11781, "Yao"),
        new GB2312CodeSpellingPair(-11604, "Ye"),
        new GB2312CodeSpellingPair(-11589, "Yi"),
        new GB2312CodeSpellingPair(-11536, "Yin"),
        new GB2312CodeSpellingPair(-11358, "Ying"),
        new GB2312CodeSpellingPair(-11340, "Yo"),
        new GB2312CodeSpellingPair(-11339, "Yong"),
        new GB2312CodeSpellingPair(-11324, "You"),
        new GB2312CodeSpellingPair(-11303, "Yu"),
        new GB2312CodeSpellingPair(-11097, "Yuan"),
        new GB2312CodeSpellingPair(-11077, "Yue"),
        new GB2312CodeSpellingPair(-11067, "Yun"),
        new GB2312CodeSpellingPair(-11055, "Za"),
        new GB2312CodeSpellingPair(-11052, "Zai"),
        new GB2312CodeSpellingPair(-11045, "Zan"),
        new GB2312CodeSpellingPair(-11041, "Zang"),
        new GB2312CodeSpellingPair(-11038, "Zao"),
        new GB2312CodeSpellingPair(-11024, "Ze"),
        new GB2312CodeSpellingPair(-11020, "Zei"),
        new GB2312CodeSpellingPair(-11019, "Zen"),
        new GB2312CodeSpellingPair(-11018, "Zeng"),
        new GB2312CodeSpellingPair(-11014, "Zha"),
        new GB2312CodeSpellingPair(-10838, "Zhai"),
        new GB2312CodeSpellingPair(-10832, "Zhan"),
        new GB2312CodeSpellingPair(-10815, "Zhang"),
        new GB2312CodeSpellingPair(-10800, "Zhao"),
        new GB2312CodeSpellingPair(-10790, "Zhe"),
        new GB2312CodeSpellingPair(-10780, "Zhen"),
        new GB2312CodeSpellingPair(-10764, "Zheng"),
        new GB2312CodeSpellingPair(-10587, "Zhi"),
        new GB2312CodeSpellingPair(-10544, "Zhong"),
        new GB2312CodeSpellingPair(-10533, "Zhou"),
        new GB2312CodeSpellingPair(-10519, "Zhu"),
        new GB2312CodeSpellingPair(-10331, "Zhua"),
        new GB2312CodeSpellingPair(-10329, "Zhuai"),
        new GB2312CodeSpellingPair(-10328, "Zhuan"),
        new GB2312CodeSpellingPair(-10322, "Zhuang"),
        new GB2312CodeSpellingPair(-10315, "Zhui"),
        new GB2312CodeSpellingPair(-10309, "Zhun"),
        new GB2312CodeSpellingPair(-10307, "Zhuo"),
        new GB2312CodeSpellingPair(-10296, "Zi"),
        new GB2312CodeSpellingPair(-10281, "Zong"),
        new GB2312CodeSpellingPair(-10274, "Zou"),
        new GB2312CodeSpellingPair(-10270, "Zu"),
        new GB2312CodeSpellingPair(-10262, "Zuan"),
        new GB2312CodeSpellingPair(-10260, "Zui"),
        new GB2312CodeSpellingPair(-10256, "Zun"),
        new GB2312CodeSpellingPair(-10254, "Zuo")
        };

	private static ChineseSpelling chineseSpelling = new ChineseSpelling();
    private static Pattern pattern = Pattern.compile("[\\u4e00-\\u9fa5]");

	public static ChineseSpelling getInstance() {
		return chineseSpelling;
	}

	private static int getChsAscii(String chs) {
		int asc = 0;
		try {
			byte[] bytes = chs.getBytes("gb2312");
			if (bytes.length == 1) { // 英文字符
				asc = bytes[0];
			}
			if (bytes.length == 2) { // 中文字符
				int hightByte = 256 + bytes[0];
				int lowByte = 256 + bytes[1];
				asc = (256 * hightByte + lowByte) - 256 * 256;
			}
		} catch (UnsupportedEncodingException e) {
		    e.printStackTrace();
		}

		return asc;
	}

	private static String convert(String str) {
		String result = null;
		int ascii = getChsAscii(str);

		if (ascii > 0 && ascii < 160) {
			result = String.valueOf((char) ascii);
		} else {
			for (int i = (pairs.length - 1); i >= 0; i--) {
				if (pairs[i].gb2312Code <= ascii) {
					result = pairs[i].spelling;
					break;
				}
			}
		}
		return result;
	}

	/**
	 * <p>
	 * 获取对应字符的中文拼音
	 * </p>
	 *
	 * @param chs
	 *            含中文的字符串
	 * @return 转换成拼音的字符串
	 */
	public static String getSpelling(String chs) {
        Matcher matcher = pattern.matcher(chs);
        if (!matcher.find()) {
            return chs;
        }
		String key, value;
		StringBuilder buffer = new StringBuilder();
		for (int i = 0; i < chs.length(); i++) {
			key = chs.substring(i, i + 1);
			try {
				if (key.getBytes("gb2312").length == 2) {
					value = convert(key);
					if (value == null) {
						value = "unknown";
					}
				} else {
					value = key;
				}
				buffer.append(value);
			} catch (UnsupportedEncodingException e) {
				value = key;
				buffer.append(value);
				e.printStackTrace();
			}

		}
		return buffer.toString();
	}

    private static class GB2312CodeSpellingPair {
        public int gb2312Code;
        public String spelling;
        public GB2312CodeSpellingPair(int code, String strSpelling) {
            this.gb2312Code = code;
            this.spelling = strSpelling;
        }
    }
}
